package Linklist;
/*
* 链表内指定区间反转
* */
public class NKONT1 {
    public static void main(String[] args) {

    }
    public static ListNode reverseBetween (ListNode head, int m, int n) {
        // write code here
        if(m==n){
            return head;
        }else{
            if(m>=1){
                ListNode p=new ListNode(0);
                ListNode q=new ListNode(0);
                ListNode r=new ListNode(0);
                q=head;
                p=head;
                r=head;
                for (int i = 0; i <m ; i++) {
                    p=p.next;

                }
                for (int i = 0; i <m-1 ; i++) {
                    r=r.next;
                }
                for (int i = 0; i <n ; i++) {
                    q=q.next;
                }
                ListNode s=new ListNode(0);
                ListNode t=new ListNode(0);
                ListNode pre=new ListNode(0);
                s=p.next;
                t=q;
                pre=r;
                s=s.next;
                t=t.next;
                r=r.next;
                while(t!=q){
                    t.next=r;
                    r=t;
                    t=s;
                    s=s.next;
                }
                p.next=q.next;
                pre.next=q;

            }

        }
        return head;
    }
}

/*  public class ListNode {
    int val;
    ListNode next = null;
   public ListNode(int val) {
     this.val = val;
    }
  }*/
